package ucla.axelia.vista;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import ucla.axelia.controlador.interfaces.IServicioAdministracionActividad;
import ucla.axelia.modelo.beans.EventualidadActividad;
import ucla.axelia.modelo.data.Actividad;
import ucla.axelia.modelo.data.Programa;
import ucla.axelia.modelo.data.TipoActividad;

import nextapp.echo2.app.Extent;

import com.obelisco.vista.componentes.ContenedorBusqueda;
import com.obelisco.vista.controles.Grid;
import com.obelisco.vista.controles.Label;
import com.obelisco.vista.controles.SelectField;
import com.obelisco.vista.controles.TextField;

public class ContenedorBusquedaActividades extends ContenedorBusqueda{

	private IServicioAdministracionActividad servicioAdministracionActividad;
	
	private TextField txtNombreActividad;
	private SelectField cmbTipoActividad;
	private SelectField cmbPrograma;
	private SelectField cmbEventualidad;

	
	public ContenedorBusquedaActividades(){
		super();		
	}
	
	private void initComponents() {
		this.removeAll();
		
	    Grid grdBusqueda = new Grid();
		grdBusqueda.setWidth(new Extent(100, Extent.PERCENT));
		grdBusqueda.setSize(4);
		grdBusqueda.setStyleName("Obelisco.GridPaneDialogo");
						
		Label lblNombreActividad = new Label("Nombre");
		grdBusqueda.add(lblNombreActividad);
		txtNombreActividad = new TextField(200);
		txtNombreActividad.setMaximumLength(50);
		grdBusqueda.add(txtNombreActividad);
		
		Label lblTipoActividad = new Label("Tipo");
		grdBusqueda.add(lblTipoActividad);
		cmbTipoActividad = new SelectField(120);
		grdBusqueda.add(cmbTipoActividad);
		
		Label lblPrograma = new Label("Programa");
		grdBusqueda.add(lblPrograma);
		cmbPrograma = new SelectField(200);
		grdBusqueda.add(cmbPrograma);
		
		Label lblEventualidad = new Label("Eventualidad");
		grdBusqueda.add(lblEventualidad);
		cmbEventualidad= new SelectField(120);
		grdBusqueda.add(cmbEventualidad);
		
		this.add(grdBusqueda);
	}
	
	public Object[] getValoresParametros() {
		return null;
	}
	
	@Override
	public void inicializar() {
		initComponents();
				
		cmbTipoActividad.setNombreItemDefecto("Cualquiera");
		List tiposActividad = servicioAdministracionActividad.buscarTipoActividades();
		cmbTipoActividad.inicializarDatos(tiposActividad, "nombreTipoActividad", "idTipoActividad");
		
		cmbPrograma.setNombreItemDefecto("Cualquiera");
		List programasPorUsuario = servicioAdministracionActividad.buscarProgramasPorUsuarioActual();
		cmbPrograma.inicializarDatos(programasPorUsuario, "nombrePrograma", "idPrograma");
		
		cmbEventualidad.setNombreItemDefecto("Cualquiera");
		List eventualidades = EventualidadActividad.getEventualidadesActividad();		
		cmbEventualidad.inicializarDatos(eventualidades, "nombre", "id");		
	}

	@Override
	public List realizarBusqueda() {
		// TODO Auto-generated method stub
		Map<String, Object> criterios = new HashMap();
		if(cmbTipoActividad.getSelectedItem() != null) {
			TipoActividad tipoActividad = (TipoActividad)cmbTipoActividad.getSelectedItem();
			criterios.put("tipoActividad.idTipoActividad", tipoActividad.getIdTipoActividad().toString().trim());
		}
		if (cmbPrograma.getSelectedItem()!= null) {
			Programa programa = (Programa)cmbPrograma.getSelectedItem();
			criterios.put("programa.idPrograma", programa.getIdPrograma().toString().trim());
		}
		if(cmbEventualidad.getSelectedItem() != null) {
			EventualidadActividad eventualidadActividad = (EventualidadActividad)cmbEventualidad.getSelectedItem();
			criterios.put("eventualidad", eventualidadActividad.getId());
		}
		if (!txtNombreActividad.getText().trim().equals("")) {
			criterios.put("nombreActividad", txtNombreActividad.getText().trim());
		}
		
		List actividades = new ArrayList();
		try {		
			actividades = servicioAdministracionActividad.buscarActividadesPorCriterios(criterios);
		}
		catch(Exception e) {
			e.printStackTrace();
		}
		txtNombreActividad.setText("");			
		return actividades;
	}	

	
	// Getter y Setter
	public IServicioAdministracionActividad getServicioAdministracionActividad() {
		return servicioAdministracionActividad;
	}

	public void setServicioAdministracionActividad(
			IServicioAdministracionActividad servicioAdministracionActividad) {
		this.servicioAdministracionActividad = servicioAdministracionActividad;
	}

}
